home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / nihcl-30.lha / nihcl-3.0 / errfac / gettok.c < prev    next >
C/C++ Source or Header  |  1990-05-15  |  2KB  |  71 lines

  1. /* gettok.c -- get token from a String object
  2.  
  3.     THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A
  4.     "UNITED STATES GOVERNMENT WORK".  IT WAS WRITTEN AS A PART OF THE
  5.     AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE.  THIS MEANS IT
  6.     CANNOT BE COPYRIGHTED.  THIS SOFTWARE IS FREELY AVAILABLE TO THE
  7.     PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO
  8.     RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.
  9.  
  10. Author:
  11.     S.M. Orlow
  12.     Systex,Inc.
  13.     Beltsville, MD 20705
  14.     301-474-0111
  15.  
  16. Contractor:
  17.     K. E. Gorlen
  18.     Bg. 12A, Rm. 2017
  19.     Computer Systems Laboratory
  20.     Division of Computer Research and Technology
  21.     National Institutes of Health
  22.     Bethesda, Maryland 20892
  23.     Phone: (301) 496-5363
  24.     uucp: uunet!nih-csl!kgorlen
  25.     Internet: kgorlen@alw.nih.gov
  26.  
  27. Function:
  28.  
  29. $Log:    gettok.c,v $
  30.  * Revision 3.0  90/05/15  22:37:04  kgorlen
  31.  * Release for 1st edition.
  32.  * 
  33. */
  34.  
  35. static const char rcsid[] = "$Header: /afs/alw.nih.gov/unix/sun4_40c/usr/local/src/nihcl-3.0/share/errfac/RCS/gettok.c,v 3.0 90/05/15 22:37:04 kgorlen Rel $";
  36.  
  37. #include "gettok.h"
  38.  
  39. /* is_char_of -- return 1 when char is in string */
  40. int is_char_of(char ch,char* q) {
  41.       while ( *q != '\0' ) 
  42.         if ( ch == *(q++) ) return 1;
  43.       return 0;
  44.     }/* end is_char_of */
  45.  
  46. static char* lastp = 0;
  47.  
  48. char* gettok(char* inbuf,char* tmnl) {
  49.    char* retp;
  50.  
  51.    if ( inbuf != 0 ) {
  52.      lastp = inbuf;
  53.      retp = inbuf;
  54.      }
  55.     else
  56.      retp = lastp;
  57.  
  58.     while ( *lastp != '\0' ) { /* find next terminal char */
  59.       if ( is_char_of(*lastp,tmnl) ) break;
  60.       ++lastp;
  61.       };/* end while */
  62.     if ( *lastp != '\0' ) {
  63.       *(lastp++) = '\0';
  64.       while ( *lastp != '\0' ) {/* skip all adjacent terminal chars */
  65.           if ( !is_char_of(*lastp,tmnl) ) break;
  66.       ++lastp;
  67.       };/*end while*/
  68.       };/* end if*/
  69.    return retp;
  70. }/* end gettok */
  71.